package com.pig4cloud.pigx.contract.executer.trade.handler;

import com.pig4cloud.pigx.contract.bo.ContractTradeHandleBO;
import com.pig4cloud.pigx.contract.mongo.entity.ContractTradeMongo;

/**
 * 成交记录处理器
 *
 * @since 2022/8/17 11:12
 */
public interface TradeHandler {

	/**
	 * 获取成交记录
	 *
	 * @param tradeId tradeId
	 * @return {@link ContractTradeMongo}
	 * @since 2022/8/17 21:21
	 */
	ContractTradeMongo getTrade(Long tradeId);

	/**
	 * 判断是否支持
	 *
	 * @param trade trade
	 * @return {@link boolean}
	 * @since 2022/8/17 11:20
	 */
	boolean support(ContractTradeMongo trade);

	/**
	 * 成交记录处理
	 *
	 * @param bo bo
	 * @since 2022/8/17 11:15
	 */
	void handle(ContractTradeHandleBO bo);

	/**
	 * 处理成功
	 *
	 * @param bo bo
	 * @since 2022/8/17 11:31
	 */
	void success(ContractTradeHandleBO bo);

	/**
	 * 处理失败
	 *
	 * @param bo bo
	 * @param e  异常
	 * @since 2022/8/17 11:31
	 */
	void fail(ContractTradeHandleBO bo, Exception e);
}
